dnd: Add more surface apis
authorMatthias Clasen <mclasen@redhat.com>
Mon, 23 Oct 2017 12:16:31 +0000 (14:16 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 23 Oct 2017 12:16:31 +0000 (14:16 +0200)
The new function, gtk_drag_source_set_icon_surface, is for setting
a drag source icon without using GdkPixbuf.

docs/reference/gtk/gtk4-sections.txt
gtk/gtkdragsource.c
gtk/gtkdragsource.h

index e88cb0b6dcb6ec71d411f886cf2b5e7a26943c57..186dea70bd7f488966de48ba5976d4ebb27ae83d 100644 (file)
@@ -5365,6 +5365,7 @@ gtk_drag_set_icon_default
 gtk_drag_check_threshold
 gtk_drag_source_set
 gtk_drag_source_set_icon_pixbuf
+gtk_drag_source_set_icon_surface
 gtk_drag_source_set_icon_name
 gtk_drag_source_set_icon_gicon
 gtk_drag_source_unset
index e6bc1857974d6cccb84adeab72e8244428d43cb8..4c701b459948cdabb4d3daf70171862bede72ab1 100644 (file)
@@ -373,6 +373,32 @@ gtk_drag_source_set_icon_pixbuf (GtkWidget *widget,
   site->image_def = gtk_image_definition_new_pixbuf (pixbuf, 1);
 }
 
+/**
+ * gtk_drag_source_set_icon_surface: (method)
+ * @widget: a #GtkWidget
+ * @surface: the cairo surface for the drag icon
+ * 
+ * Sets the icon that will be used for drags from a particular widget
+ * from a cairo surface. GTK+ retains a reference for @surface and will
+ * release it when it is no longer needed.
+ *
+ * Since: 3.94
+ */
+void
+gtk_drag_source_set_icon_surface (GtkWidget       *widget,
+                                  cairo_surface_t *surface)
+{
+  GtkDragSourceSite *site;
+
+  g_return_if_fail (GTK_IS_WIDGET (widget));
+
+  site = g_object_get_data (G_OBJECT (widget), "gtk-site-data");
+  g_return_if_fail (site != NULL);
+
+  g_clear_pointer (&site->image_def, gtk_image_definition_unref);
+  site->image_def = gtk_image_definition_new_surface (surface);
+}
+
 /**
  * gtk_drag_source_set_icon_name: (method)
  * @widget: a #GtkWidget
index 2e3e2c39fbfda290f38b2cbdc698573ce1265b31..cca2a9784c9d46919775010f83d17f11e48c84a4 100644 (file)
@@ -62,6 +62,9 @@ void           gtk_drag_source_add_uri_targets   (GtkWidget    *widget);
 GDK_AVAILABLE_IN_ALL
 void gtk_drag_source_set_icon_pixbuf  (GtkWidget       *widget,
                                       GdkPixbuf       *pixbuf);
+GDK_AVAILABLE_IN_3_94
+void gtk_drag_source_set_icon_surface (GtkWidget       *widget,
+                                       cairo_surface_t *surface);
 GDK_AVAILABLE_IN_ALL
 void gtk_drag_source_set_icon_name    (GtkWidget       *widget,
                                       const gchar     *icon_name);